package com.rfy.framework.util;


import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author zhang
 * @创建时间： 2017-3-4 下午1:50:49
 * @描述：正则表达式 工具
 *
 */
public class RegexUtil {

	//邮箱正则
	public static final String REGEX_EMAIL = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";

	//手机号
	public static final String REGEX_MOBILE = "1\\d{10}";

	//固话
	public static final String REGEX_PHONE = "^(\\+\\d{2}-)?0\\d{2,3}-\\d{7,8}$";

	//支持带“-”格式的手机号
	public static final String REGEX_MOBILE_2 = "1\\d{10}|1\\d{2}-\\d{4}-\\d{4}";

	//手机号和电话正则表达式
	public static final String REGEX_CONTACT_NUMBER = "(1\\d{9,11})|(0\\d{9,11})|(\\d{4}|\\d{3})-(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1})|((\\d{4}|\\d{3})-(\\d{7,8})|(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1}))|(\\d{7,8})";

	//数字
	public static final String REGEX_NUMERIC = "[0-9]*";

	public static final String REGEX_CHINESECHAR = "[\u4e00-\u9fa5]";


	/**
	 * 校验是否是固话
	 * @param str
	 * @return
	 */
	public static boolean isPhone(String str){
		return is(str,REGEX_PHONE);
	}

	/**
	 * 校验是否是手机号或固话
	 * @param str
	 * @return
	 */
	public static boolean isMobileOrPhone(String str){
		return is(str,REGEX_CONTACT_NUMBER);
	}

	/**
	 * 校验是否邮箱
	 * @param str
	 * @return
	 */
	public static boolean isEmail(String str){
		return is(str, REGEX_EMAIL);
	}

	/**
	 * 是否手机
	 * @param str
	 * @return
	 */
	public static boolean isMobile(String str){
		return is(str, REGEX_MOBILE);
	}

	/**
	 * 是否带"-"格式的手机
	 * @param str
	 * @return
	 */
	public static boolean isMobileHasCharacter(String str){
		return is(str, REGEX_MOBILE_2);
	}

	/**
	 * 是否为数字
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String str){
		return is(str, REGEX_NUMERIC);
	}

	/**
	 * 是否符合正则
	 *
	 * @param str
	 * @param regEx
	 * @return
	 */
	public static boolean is(String str, String regEx){

		if(StringUtil.isBlank(str)){
			return false;
		}
		// 编译正则表达式
		Pattern pattern = Pattern.compile(regEx);
		// 忽略大小写的写法
		// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(str);
		// 字符串是否与正则表达式相匹配
		return matcher.matches();
	}

	/**
	 * 查找
	 * @param str
	 * @param regEx
	 * @return
	 */
	public static String find(String str, String regEx){
		// 编译正则表达式
		Pattern pattern = Pattern.compile(regEx);
		Matcher matcher = pattern.matcher(str);
		while(matcher.find()){
			return matcher.group(0);
		}
		return null;
	}

	/**
	 * 是否有中文字符
	 * @param str
	 * @return
	 */
	public static boolean hasChineseChar(String str) {
		boolean temp = false;
		Pattern p = Pattern.compile(REGEX_CHINESECHAR);
		Matcher m = p.matcher(str);
		if (m.find()) {
			temp = true;
		}
		return temp;
	}
}
